import { call, put, takeLatest } from 'redux-saga/effects'
/*
    call: 是用来触发请求方法用的
    put: 和 dispatch 方法功能是一样的，用来触发事件用的
    takeLatest: 是用来监听 saga 事件用的
*/

// 导入数据请求的方法
import { getBannerListData, getProListData } from '../api/pro'

import { CHANGE_BANNER_LIST, CHANGE_PRO_LIST, REQUEST_BANNER_LIST, REQUEST_PRO_LIST } from './types'

// 是一个异步方法
function* getBannerListAction() {
    // 发送数据请求得到数据
    const res = yield call(getBannerListData)

    // 将请求得到的数据放在全局状态管理中
    yield put({
        type: CHANGE_BANNER_LIST,
        payload: res.data.data
    })
}


// 是一个异步方法
function* getProListAction(actions) {

    // console.log(111111, actions);

    // 发送数据请求得到数据
    // 发送请求的时候如果需要传递参数，可以写在第二个参数中
    const res = yield call(getProListData, actions.payload)

    // 将请求得到的数据放在全局状态管理中
    yield put({
        type: CHANGE_PRO_LIST,
        payload: res.data.data
    })
}

// 监听事件执行异步方法
function* mySaga() {
    // takeLatest 监听执行任务
    // takeLatest(需要监听任务名称，监听到任务后执行的异步方法)
    yield takeLatest(REQUEST_BANNER_LIST, getBannerListAction)
    yield takeLatest(REQUEST_PRO_LIST, getProListAction)
}

export default mySaga